: Use /bin/sh # $Id: makeshar,v 1.7 1994/01/25 07:11:57 geoff Exp $ # Copyright 1993, Geoff Kuenning, Granada Hills, CA # All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. All advertising materials mentioning features or use of this software # must display the following acknowledgment: # This product includes software developed by Geoff Kuenning and # other unpaid contributors. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # Make a shar file, keeping file sizes below a maximum, but as large as # possible. The output files are put in file01.shar through filenn.shar, # where "file" is the output base name (default "prog"). # If one of the output files is named "README", it is placed first in the # first shar file. # Usage: # makeshar [-f n] [-n] [-m max-size] [-o output-base ] [shar-switches] file-list # $Log: makeshar,v $ # Revision 1.7 1994/01/25 07:11:57 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. SHAR_SW= MAXSIZE=60000 OUTPUT_BASE=prog NUM_SHARS=no FROM=1 TMP=${TMPDIR:-/tmp}/ms$$ while [ $# -gt 0 ] case "$1" in FROM=$2 shift; shift ;; MAXSIZE=$2 shift; shift ;; NUM_SHARS=yes shift ;; OUTPUT_BASE="$2" shift; shift ;; SHAR_SW="$SHAR_SW $1" shift ;; break ;; esac trap "/bin/rm -f ${TMP}; exit 1" 1 2 15 trap "/bin/rm -f ${TMP}; exit 0" 13 sed -e "s;OUTPUT_BASE;$OUTPUT_BASE;" -e "s;SHAR_SW;$SHAR_SW;" \ -e "s;FROM;$FROM;" \ -e "s;MAXSIZE;$MAXSIZE;" > ${TMP} << 'EOF_AWK_SCRIPT' BEGIN { nfiles = 0 } if ($3 == "total") next # Shar adds one extra character per line size[nfiles] = $1 + $2 files[nfiles] = $3 nfiles++ END \ outbase = "OUTPUT_BASE" sharcount = FROM for (filesdone = 0; filesdone < nfiles; sharcount++) { printf ("%s", "isharSHAR_SW") totsize = 0 for (i = 0; filesdone == 0 && i < nfiles; i++) if (files[i] == "README") { filesdone++ totsize += size[i] printf (" %s", files[i]) files[i] = "" size[i] = 0 } for (i = 0; totsize < MAXSIZE && i < nfiles; i++) if (files[i] != "" \ && (totsize == 0 || size[i] < MAXSIZE - totsize)) { filesdone++ totsize += size[i] printf (" %s", files[i]) files[i] = "" size[i] = 0 } printf (" > %s%2.2d.shar\n", outbase, sharcount) } print "echo", sharcount - 1 EOF_AWK_SCRIPT nshars=`wc -lc "$@" \ | sort -rn \ | awk -F ${TMP} \ | sh` if [ $NUM_SHARS = yes ] echo $nshars echo $nshars shar files: ls -l $OUTPUT_BASE??.shar /bin/rm -f ${TMP}